package com.yyc.utils;

import org.apache.shiro.crypto.hash.Md5Hash;

public class Md5Utils {

	/** 16进制的字符数组 */
//	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
//			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

	/**
	 * 
	 * 
	 * @param source
	 *            需要加密的原字符串
	 * @param salt
	 *            盐值
	 * @param uppercase
	 *            是否转为大写字符串
	 * @return 加密结果
	 */
	public static String MD5Encode(String source, String salt,
			boolean uppercase) {
		String result = null;
		try {
			result = source;
			//使用apache.shiro进行带盐值的MD5加密
			result = new Md5Hash(result,salt, 3).toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return uppercase ? result.toUpperCase() : result;
	}

	/**
	 * 转换字节数组为16进制字符串
	 *
	 */
//	private static String byteArrayToHexString(byte[] bytes) {
//		StringBuilder stringBuilder = new StringBuilder();
//		for (byte tem : bytes) {
//			stringBuilder.append(byteToHexString(tem));
//		}
//		return stringBuilder.toString();
//	}

	/**
	 * 转换byte到16进制
	 *
	 * return 16进制对应的字符
	 */
//	private static String byteToHexString(byte b) {
//		int n = b;
//		if (n < 0) {
//			n = 256 + n;
//		}
//		int d1 = n / 16;
//		int d2 = n % 16;
//		return hexDigits[d1] + hexDigits[d2];
//	}

	/*public static void main(String[] args) {
		System.out.println(Md5Utils.MD5Encode("123456", "admin", false));
		System.out.println(Md5Utils.MD5Encode("123456", "13638607180", false));

	}*/
}
